/*
 * @lc app=leetcode.cn id=202 lang=javascript
 *
 * [202] 快乐数

// @lc code=start
/**
 * @param {number} n
 * @return {boolean}
 */
/**
 * 判断链表是否有环的思想
 */
// var getNext = function (num) {
//   let result = 0;
//   while (num) {
//     result += (num % 10) * (num % 10);
//     num = Math.floor(num / 10);
//   }
//   return result;
// }
// var isHappy = function (n) {
//   let pre = n, cur = getNext(n);
//   while (cur !== 1) {
//     pre = getNext(pre);
//     cur = getNext(getNext(cur));
//     if(cur === pre){
//       return false;
//     }
//   }
//   return true;
// };


/**
 * 复习 2021-08-04
 */
// var getNext = function(n, cache){
//   if(n === 1) return true;
//   let next = 0;
//   while(n){
//     next += (n % 10) * (n % 10);
//     n = Math.floor(n / 10);
//   }

//   if(cache[next]) return false;
//   cache[next] = next;
//   return getNext(next, cache);
// }
// var isHappy = function (n) {
//   let cache = {};
//   if (!n) return false;
//   if (n == 1) return true;
//   return getNext(n, cache);
// };

// 一起学算法-1
let getNext = function(p){
  let temp = 0;
  while(p) {
    temp += (p % 10) * (p % 10);
    p = (p / 10) | 0;
  }
  return temp;
}
var isHappy = function (n) {
  if(!n) return false;
  let p = n, q = getNext(n);
  while(p != q) {
    p = getNext(p);
    q = getNext(getNext(q));
  }
  return p === 1;
}
 // @lc code=end

